home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 1.iso / ARGONET / PD / GAMES / WIMPGAME / MINES2.ZIP / !Mines / s / HintA2 < prev   
Text File  |  1995-01-27  |  15KB  |  702 lines

  1. ; Assemblercode der Routine test_if_possible
  2. ; typedef struct {char x,y,test,domain;} border_typ;
  3.  
  4.     AREA     |C$$code|, CODE, READONLY
  5.     EXPORT    |test_if_possible|
  6.  
  7. r0    RN 0
  8. r1    RN 1
  9. r2    RN 2
  10. r3    RN 3
  11. r4    RN 4
  12. r5    RN 5
  13. r6    RN 6
  14. r7    RN 7
  15. r8    RN 8
  16. r9    RN 9
  17. r10    RN 10
  18. r11    RN 11
  19. r12    RN 12
  20. r13    RN 13
  21. r14    RN 14
  22. r15    RN 15
  23.  
  24. sl    RN 10 ; stack limit
  25. fp    RN 11 ; frame pointer
  26. ip    RN 12 ; temporary workspace
  27. sp    RN 13 ; stack pointer
  28. lr    RN 14 ; link register
  29. pc    RN 15 ; program counter
  30.  
  31. d    RN 0
  32. XMAX    RN 1
  33. YMAX    RN 2
  34. feld    RN 3
  35. ptr    RN 3
  36. x    RN 4
  37. y    RN 5
  38. test    RN 6
  39. _14    RN 7
  40. _58    RN 8
  41. buffer1 RN 9
  42. buffer2 RN 10
  43. mines    RN 11
  44. marks    RN 12
  45.  
  46. MINE_1  EQU &00000001
  47. MINE_2  EQU &00000100
  48. MINE_3  EQU &00010000
  49. MINE_4  EQU &01000000
  50.  
  51. MARK_1  EQU &00000002
  52. MARK_2  EQU &00000200
  53. MARK_3  EQU &00020000
  54. MARK_4  EQU &02000000
  55.  
  56. CLOSED_1 EQU &00000004
  57. CLOSED_2 EQU &00000400
  58. CLOSED_3 EQU &00040000
  59. CLOSED_4 EQU &04000000
  60.  
  61. ; a  b  c  d  e
  62. ; f  1  2  3  g
  63. ; h  4  X  5  i
  64. ; j  6  7  8  k
  65. ; l  m  n  o  p
  66.  
  67.     DCB "test_if_possible",0
  68.  
  69.     ALIGN
  70.  
  71. ; test_if_possible(border_typ *b,int XMAX,int YMAX,char *feld);
  72. |test_if_possible|
  73.     STMFD    sp!,{r4-r12,r14}
  74.     LDRB    x,[r0]
  75.     LDRB    y,[r0,#1]
  76.     LDRB    test,[r0,#2]
  77.     MUL    d,x,YMAX
  78.     ADD    d,d,y
  79.     ADD    ptr,feld,d,LSL #2
  80.     CMP    y,#0
  81.     MOVLE    _14,#CLOSED_1        ; fields 1,2 and 3 are closed
  82.     ORRLE    _14,_14,#CLOSED_2    ; and need not be processed
  83.     ORRLE    _14,_14,#CLOSED_3
  84.     BLE    middle
  85.     SUB    ptr,ptr,#4
  86.     CMP    x,#0
  87.     LDRGTB  _14,[ptr,-YMAX,LSL #2]        ; load field no 1
  88.     MOVLE    _14,#CLOSED_1
  89.     LDRB    d,[ptr]            ; load field no 2
  90.     ORR    _14,_14,d,LSL #8
  91.     SUB    d,XMAX,x
  92.     CMP    d,#1
  93.     LDRGTB    d,[ptr,YMAX,LSL #2]    ; load field no 3
  94.     MOVLE    d,#CLOSED_1
  95.     ORR    _14,_14,d,LSL #16
  96.     ADD    ptr,ptr,#4
  97. middle
  98.     CMP    x,#0
  99.     LDRGTB    d,[ptr,-YMAX,LSL #2]    ; load field no 4
  100.     MOVLE    d,#CLOSED_1
  101.     ORR    _14,_14,d,LSL #24
  102.     LDRB    buffer1,[ptr]        ; load field X
  103.     SUB    d,XMAX,x
  104.     CMP    d,#1
  105.     LDRGTB    _58,[ptr,YMAX,LSL #2]    ; load field no 5
  106.     MOVLE    _58,#CLOSED_1
  107.  
  108.     SUB    d,YMAX,y
  109.     CMP    d,#1
  110.     ORRLE    _58,_58,#CLOSED_2
  111.     ORRLE    _58,_58,#CLOSED_3
  112.     ORRLE    _58,_58,#CLOSED_4
  113.     BLE    init_done
  114.  
  115.     ADD    ptr,ptr,#4
  116.     CMP    x,#0
  117.     LDRGTB    d,[ptr,-YMAX,LSL #2]    ; load field no 6
  118.     MOVLE    d,#CLOSED_1
  119.     ORR    _58,_58,d,LSL #8
  120.     LDRB    d,[ptr]            ; load field no 7
  121.     ORR    _58,_58,d,LSL #16
  122.     SUB    d,XMAX,x
  123.     CMP    d,#1
  124.     LDRGTB    d,[ptr,YMAX,LSL #2]    ; load field no 8
  125.     MOVLE    d,#CLOSED_1
  126.     ORR    _58,_58,d,LSL #24
  127.     SUB    ptr,ptr,#4
  128. init_done
  129.     MOV    buffer2,#0
  130.  
  131. field_1
  132.     TST    _14,#CLOSED_1            ; buffer1 = X 0 0 0
  133.     BNE    field_2                ; buffer2 = 0 0 0 0
  134.     CMP    y,#2
  135.     BLT    f1_abc
  136.     SUB    ptr,ptr,#8
  137.     CMP    x,#2
  138.     LDRGEB    d,[ptr,-YMAX, LSL #3]        ; load a
  139.     ORRGE   buffer1,buffer1,d,LSL #8
  140.     CMP    x,#1
  141.     LDRGEB  d,[ptr,-YMAX,LSL #2]        ; load b
  142.     ORRGE    buffer1,buffer1,d,LSL #16
  143.     LDRB    d,[ptr]                ; load c
  144.     ORR    buffer1,buffer1,d,LSL #24
  145.     ADD    ptr,ptr,#8
  146. f1_abc
  147.     CMP    x,#2
  148.     BLT    f1_fh
  149.     SUB    ptr,ptr,YMAX,LSL #3
  150.     CMP    y,#1
  151.     LDRGEB  buffer2,[ptr,-#4]        ; load f
  152.     LDRB    d,[ptr]                ; load h
  153.     ORR    buffer2,buffer2,d,LSL #8
  154.     ADD    ptr,ptr,YMAX,LSL #3    ; buffer1 = X a b c
  155. f1_fh                    ; buffer2 = f h 0 0
  156.     MOV    mines,#0
  157.     TST    buffer1,#MINE_1
  158.     ADDNE    mines,mines,#1
  159.     TST    buffer1,#MINE_2
  160.     ADDNE    mines,mines,#1
  161.     TST    buffer1,#MINE_3
  162.     ADDNE    mines,mines,#1
  163.     TST    buffer1,#MINE_4
  164.     ADDNE    mines,mines,#1
  165.     TST    buffer2,#MINE_1
  166.     ADDNE    mines,mines,#1
  167.     TST    buffer2,#MINE_2
  168.     ADDNE    mines,mines,#1
  169.     TST    _14,#MINE_2
  170.     ADDNE    mines,mines,#1
  171.     TST    _14,#MINE_4
  172.     ADDNE    mines,mines,#1
  173.     MOV    marks,#0
  174.     TST    buffer1,#MARK_1
  175.     ADDNE    marks,marks,#1
  176.     TST    buffer1,#MARK_2
  177.     ADDNE    marks,marks,#1
  178.     TST    buffer1,#MARK_3
  179.     ADDNE    marks,marks,#1
  180.     TST    buffer1,#MARK_4
  181.     ADDNE      marks,marks,#1
  182.     TST    buffer2,#MARK_1
  183.     ADDNE    marks,marks,#1
  184.     TST    buffer2,#MARK_2
  185.     ADDNE    marks,marks,#1
  186.     TST    _14,#MARK_2
  187.     ADDNE    marks,marks,#1
  188.     TST    _14,#MARK_4
  189.     ADDNE    marks,marks,#1
  190.     CMP    marks,mines
  191.     BGT    tip_false
  192.     TST    test,#1
  193.     BNE    field_2
  194.     CMP    marks,mines
  195.     BNE    tip_false
  196. field_2 TST    _14,#CLOSED_2        ; buffer1 = X a b c
  197.     BNE    field_3            ; buffer2 = f h 0 0
  198.     BIC    buffer1,buffer1,#&0000FF00    ; delete a
  199.     TST    _14,#CLOSED_1
  200.     BEQ    f2_bc_loaded
  201.     CMP    y,#2
  202.     BLT    f2_d
  203.     SUB    ptr,ptr,#8
  204.     CMP    x,#1
  205.     LDRGEB  d,[ptr,-YMAX,LSL #2]        ; load b
  206.     ORRGE    buffer1,buffer1,d,LSL #16
  207.     LDRB    d,[ptr]                ; load c
  208.     ORR    buffer1,buffer1,d,LSL #24
  209.     SUB    d,XMAX,x
  210.     CMP    d,#1
  211.         LDRGTB    d,[ptr,YMAX,LSL #2]        ; load d
  212.     ORRGT    buffer1,buffer1,d,LSL #8
  213.     ADD    ptr,ptr,#8
  214.     B    f2_d
  215. f2_bc_loaded
  216.     CMP    y,#2
  217.     BLT    f2_d
  218.     SUB    ptr,ptr,#8
  219.     SUB    d,XMAX,x
  220.     CMP    d,#1
  221.         LDRGTB    d,[ptr,YMAX,LSL #2]        ; load d
  222.     ORRGT    buffer1,buffer1,d,LSL #8
  223.     ADD    ptr,ptr,#8
  224. f2_d    MOV    mines,#0        ; buffer1 = X d b c
  225.     TST    buffer1,#MINE_1        ; buffer2 = f h 0 0
  226.     ADDNE    mines,mines,#1
  227.     TST    buffer1,#MINE_2
  228.     ADDNE    mines,mines,#1
  229.     TST    buffer1,#MINE_3
  230.     ADDNE    mines,mines,#1
  231.     TST    buffer1,#MINE_4
  232.     ADDNE    mines,mines,#1
  233.     TST    _14,#MINE_1
  234.     ADDNE    mines,mines,#1
  235.     TST    _14,#MINE_3
  236.     ADDNE    mines,mines,#1
  237.     TST    _14,#MINE_4
  238.     ADDNE    mines,mines,#1
  239.     TST    _58,#MINE_1
  240.     ADDNE    mines,mines,#1
  241.     MOV    marks,#0
  242.     TST    buffer1,#MARK_1
  243.     ADDNE    marks,marks,#1
  244.     TST    buffer1,#MARK_2
  245.     ADDNE    marks,marks,#1
  246.     TST    buffer1,#MARK_3
  247.     ADDNE    marks,marks,#1
  248.     TST    buffer1,#MARK_4
  249.     ADDNE    marks,marks,#1
  250.     TST    _14,#MARK_1
  251.     ADDNE    marks,marks,#1
  252.     TST    _14,#MARK_3
  253.     ADDNE    marks,marks,#1
  254.     TST    _14,#MARK_4
  255.     ADDNE    marks,marks,#1
  256.     TST    _58,#MARK_1
  257.     ADDNE    marks,marks,#1
  258.     CMP    marks,mines
  259.     BGT    tip_false
  260.     TST    test,#2
  261.     BNE    field_3
  262.     CMP    marks,mines
  263.     BNE    tip_false
  264. field_3 TST    _14,#CLOSED_3            ; buffer1 = X d b c
  265.     BNE    field_5                ; buffer2 = f h 0 0
  266.     TST    _14,#CLOSED_2
  267.     BEQ    f3_cd_loaded
  268.     BIC    buffer1,buffer1,#&0000FF00    ; delete a
  269.     CMP    y,#2
  270.     BLT    f3_cd_loaded
  271.     SUB    ptr,ptr,#8
  272.     LDRB    d,[ptr]                ; load c
  273.     ORR    buffer1,buffer1,d,LSL #24
  274.     SUB    d,XMAX,x
  275.     CMP    d,#1
  276.         LDRGTB    d,[ptr,YMAX,LSL #2]        ; load d
  277.     ORRGT    buffer1,buffer1,d,LSL #8
  278.     ADD    ptr,ptr,#8
  279. f3_cd_loaded
  280.     BIC    buffer1,buffer1,#&00FF0000    ; delete b
  281.     SUB    d,XMAX,x
  282.     CMP    d,#2
  283.     BLE    f3_egi
  284.     ADD    ptr,ptr,YMAX,LSL #3
  285.     CMP    y,#2
  286.     LDRGEB    d,[ptr,-#8]            ; load e
  287.     ORRGE    buffer1,buffer1,d,LSL #16
  288.     CMP    y,#1
  289.     LDRGEB    d,[ptr,-#4]            ; load g
  290.     ORRGE    buffer2,buffer2,d,LSL #16
  291.     LDRB    d,[ptr]                ; load i
  292.     ORR    buffer2,buffer2,d,LSL #24
  293.     SUB    ptr,ptr,YMAX,LSL #3
  294. f3_egi    MOV    mines,#0        ; buffer1 = X d e c
  295.     TST    buffer1,#MINE_1        ; buffer2 = f h g i
  296.     ADDNE    mines,mines,#1
  297.     TST    buffer1,#MINE_2
  298.     ADDNE    mines,mines,#1
  299.     TST    buffer1,#MINE_3
  300.     ADDNE    mines,mines,#1
  301.     TST    buffer1,#MINE_4
  302.     ADDNE    mines,mines,#1
  303.     TST    buffer2,#MINE_3
  304.     ADDNE    mines,mines,#1
  305.     TST    buffer2,#MINE_4
  306.     ADDNE    mines,mines,#1
  307.     TST    _14,#MINE_2
  308.     ADDNE    mines,mines,#1
  309.     TST    _58,#MINE_1
  310.     ADDNE    mines,mines,#1
  311.     MOV    marks,#0
  312.     TST    buffer1,#MARK_1
  313.     ADDNE    marks,marks,#1
  314.     TST    buffer1,#MARK_2
  315.     ADDNE    marks,marks,#1
  316.     TST    buffer1,#MARK_3
  317.     ADDNE    marks,marks,#1
  318.     TST    buffer1,#MARK_4
  319.     ADDNE    marks,marks,#1
  320.     TST    buffer2,#MARK_3
  321.     ADDNE    marks,marks,#1
  322.     TST    buffer2,#MARK_4
  323.     ADDNE    marks,marks,#1
  324.     TST    _14,#MARK_2
  325.     ADDNE    marks,marks,#1
  326.     TST    _58,#MARK_1
  327.     ADDNE    marks,marks,#1
  328.     CMP    marks,mines
  329.     BGT    tip_false
  330.     TST    test,#4
  331.     BNE    field_5
  332.     CMP    marks,mines
  333.     BNE    tip_false
  334. field_5 TST     _58,#CLOSED_1            ; buffer1 = X d e c
  335.     BNE    field_8                ; buffer2 = f h g i
  336.     BIC    buffer1,buffer1,#&FF000000    ; delete c
  337.     TST    _14,#CLOSED_3
  338.     BEQ    f5_gi_loaded
  339.     SUB    d,XMAX,x
  340.     CMP    d,#2
  341.     BLE    f5_gi_loaded
  342.     ADD    ptr,ptr,YMAX,LSL #3
  343.     CMP    y,#1
  344.     LDRGEB    d,[ptr,-#4]            ; load g
  345.     ORRGE    buffer2,buffer2,d,LSL #16
  346.     LDRB    d,[ptr]                ; load i
  347.     ORR    buffer2,buffer2,d,LSL #24
  348.     SUB    d,YMAX,y
  349.     CMP    d,#1
  350.     LDRGTB    d,[ptr,#4]            ; load k
  351.     ORRGT    buffer1,buffer1,d,LSL #24
  352.     SUB    ptr,ptr,YMAX,LSL #3
  353.     B    f5_k
  354. f5_gi_loaded
  355.     SUB    d,XMAX,x
  356.     CMP    d,#2
  357.     BLE    f5_k
  358.     ADD    ptr,ptr,YMAX,LSL #3
  359.     SUB    d,YMAX,y
  360.     CMP    d,#1
  361.     LDRGTB    d,[ptr,#4]            ; load k
  362.     ORRGT    buffer1,buffer1,d,LSL #24
  363.     SUB    ptr,ptr,YMAX,LSL #3
  364. f5_k    MOV    mines,#0            ; buffer1 = X d e k
  365.     TST    buffer1,#MINE_1            ; buffer2 = f h g i
  366.     ADDNE    mines,mines,#1
  367.     TST    buffer1,#MINE_4
  368.     ADDNE    mines,mines,#1
  369.     TST    buffer2,#MINE_3
  370.     ADDNE    mines,mines,#1
  371.     TST    buffer2,#MINE_4
  372.     ADDNE    mines,mines,#1
  373.     TST    _14,#MINE_2
  374.     ADDNE    mines,mines,#1
  375.     TST    _14,#MINE_3
  376.     ADDNE    mines,mines,#1
  377.     TST    _58,#MINE_3
  378.     ADDNE    mines,mines,#1
  379.     TST    _58,#MINE_4
  380.     ADDNE    mines,mines,#1
  381.     MOV    marks,#0
  382.     TST    buffer1,#MARK_1
  383.     ADDNE    marks,marks,#1
  384.     TST    buffer1,#MARK_4
  385.     ADDNE    marks,marks,#1
  386.     TST    buffer2,#MARK_3
  387.     ADDNE    marks,marks,#1
  388.     TST    buffer2,#MARK_4
  389.     ADDNE    marks,marks,#1
  390.     TST    _14,#MARK_2
  391.     ADDNE    marks,marks,#1
  392.     TST    _14,#MARK_3
  393.     ADDNE    marks,marks,#1
  394.     TST    _58,#MARK_3
  395.     ADDNE    marks,marks,#1
  396.     TST    _58,#MARK_4
  397.     ADDNE    marks,marks,#1
  398.     CMP    marks,mines
  399.     BGT    tip_false
  400.     TST    test,#16
  401.     BNE    field_8
  402.     CMP    marks,mines
  403.     BNE    tip_false
  404. field_8 TST    _58,#CLOSED_4            ; buffer1 = X d e k
  405.     BNE    field_7                ; buffer2 = f h g i
  406.     TST    _58,#CLOSED_1
  407.     BEQ    f8_ik_loaded
  408.     BIC    buffer1,buffer1,#&FF000000    ; delete c
  409.     SUB    d,XMAX,x
  410.     CMP    d,#2
  411.     BLE    f8_ik_loaded
  412.     ADD    ptr,ptr,YMAX,LSL #3
  413.     LDRB    d,[ptr]                ; load i
  414.     ORR    buffer2,buffer2,d,LSL #24
  415.     SUB    d,YMAX,y
  416.     CMP    d,#1
  417.     LDRGTB    d,[ptr,#4]            ; load k
  418.     ORRGT    buffer1,buffer1,d,LSL #24
  419.     SUB    ptr,ptr,YMAX,LSL #3
  420. f8_ik_loaded
  421.     BIC    buffer2,buffer2,#&00FF0000
  422.     BIC    buffer1,buffer1,#&0000FF00
  423.     BIC    buffer1,buffer1,#&00FF0000
  424.     SUB    d,YMAX,y
  425.     CMP    d,#2
  426.     BLE    f8_no_loaded
  427.     ADD    ptr,ptr,#8
  428.     LDRB    d,[ptr]                ; load n
  429.     ORR    buffer2,buffer2,d,LSL #16
  430.     SUB    d,XMAX,x
  431.     CMP    d,#1
  432.     LDRGTB    d,[ptr,YMAX,LSL #2]        ; load o
  433.     ORRGT    buffer1,buffer1,d,LSL #16
  434.     SUB    d,XMAX,x
  435.     CMP    d,#2
  436.     LDRGTB    d,[ptr,YMAX,LSL #3]        ; load p
  437.     ORRGT    buffer1,buffer1,d,LSL #8
  438.     SUB    ptr,ptr,#8
  439. f8_no_loaded
  440.     MOV    mines,#0            ; buffer1 = X p o k
  441.     TST    buffer1,#MINE_1            ; buffer2 = f h n i
  442.     ADDNE    mines,mines,#1
  443.     TST    buffer1,#MINE_2
  444.     ADDNE    mines,mines,#1
  445.     TST    buffer1,#MINE_3
  446.     ADDNE    mines,mines,#1
  447.     TST    buffer1,#MINE_4
  448.     ADDNE    mines,mines,#1
  449.     TST    buffer2,#MINE_3
  450.     ADDNE    mines,mines,#1
  451.     TST    buffer2,#MINE_4
  452.     ADDNE    mines,mines,#1
  453.     TST    _58,#MINE_1
  454.     ADDNE    mines,mines,#1
  455.     TST    _58,#MINE_3
  456.     ADDNE    mines,mines,#1
  457.     MOV    marks,#0
  458.     TST    buffer1,#MARK_1
  459.     ADDNE    marks,marks,#1
  460.     TST    buffer1,#MARK_2
  461.     ADDNE    marks,marks,#1
  462.     TST    buffer1,#MARK_3
  463.     ADDNE    marks,marks,#1
  464.     TST    buffer1,#MARK_4
  465.     ADDNE    marks,marks,#1
  466.     TST    buffer2,#MARK_3
  467.     ADDNE    marks,marks,#1
  468.     TST    buffer2,#MARK_4
  469.     ADDNE    marks,marks,#1
  470.     TST    _58,#MARK_1
  471.     ADDNE    marks,marks,#1
  472.     TST    _58,#MARK_3
  473.     ADDNE    marks,marks,#1
  474.     CMP    marks,mines
  475.     BGT    tip_false
  476.     TST    test,#128
  477.     BNE    field_7
  478.     CMP    marks,mines
  479.     BNE    tip_false
  480. field_7 TST    _58,#CLOSED_3            ; buffer1 = X p o k
  481.     BNE    field_6                ; buffer2 = f h n i
  482.     BIC    buffer2,buffer2,#&FF000000    ; delete i
  483.     TST    _58,#CLOSED_4
  484.     BEQ    f7_no_loaded
  485.     BIC    buffer1,buffer1,#&00FF0000    ; delete k
  486.     BIC    buffer2,buffer2,#&00FF0000    ; delete p
  487.     SUB    d,YMAX,y
  488.     CMP    d,#2
  489.     BLE    f7_no_loaded
  490.     ADD    ptr,ptr,#8
  491.     CMP    x,#1
  492.     LDRGEB    d,[ptr,-YMAX,LSL #2]        ; load m
  493.     ORRGE    buffer2,buffer2,d,LSL #24
  494.     LDRB    d,[ptr]                ; load n
  495.     ORR    buffer2,buffer2,d,LSL #16
  496.     SUB    d,XMAX,x
  497.     CMP    d,#1
  498.     LDRGTB    d,[ptr,YMAX,LSL #2]        ; load o
  499.     ORRGT    buffer1,buffer1,d,LSL #16
  500.     SUB    ptr,ptr,#8
  501.     B    f7_m
  502. f7_no_loaded
  503.     SUB    d,YMAX,y
  504.     CMP    d,#2
  505.     BLE    f7_m
  506.     ADD    ptr,ptr,#8
  507.     SUB    d,XMAX,x
  508.     CMP    d,#1
  509.     LDRGTB    d,[ptr,-YMAX,LSL #2]        ; load m
  510.     ORRGT    buffer2,buffer2,d,LSL #24
  511.     SUB    ptr,ptr,#8
  512. f7_m    MOV    mines,#0            ; buffer1 = X p o k
  513.     TST    buffer1,#MINE_1            ; buffer2 = f h n m
  514.     ADDNE    mines,mines,#1
  515.     TST    buffer1,#MINE_3
  516.     ADDNE    mines,mines,#1
  517.     TST    buffer2,#MINE_3
  518.     ADDNE    mines,mines,#1
  519.     TST    buffer2,#MINE_4
  520.     ADDNE    mines,mines,#1
  521.     TST    _14,#MINE_4
  522.     ADDNE    mines,mines,#1
  523.     TST    _58,#MINE_1
  524.     ADDNE    mines,mines,#1
  525.     TST    _58,#MINE_2
  526.     ADDNE    mines,mines,#1
  527.     TST    _58,#MINE_4
  528.     ADDNE    mines,mines,#1
  529.     MOV    marks,#0
  530.     TST    buffer1,#MARK_1
  531.     ADDNE    marks,marks,#1
  532.     TST    buffer1,#MARK_3
  533.     ADDNE    marks,marks,#1
  534.     TST    buffer2,#MARK_3
  535.     ADDNE    marks,marks,#1
  536.     TST    buffer2,#MARK_4
  537.     ADDNE    marks,marks,#1
  538.     TST    _14,#MARK_4
  539.     ADDNE    marks,marks,#1
  540.     TST    _58,#MARK_1
  541.     ADDNE    marks,marks,#1
  542.     TST    _58,#MARK_2
  543.     ADDNE    marks,marks,#1
  544.     TST    _58,#MARK_4
  545.     ADDNE    marks,marks,#1
  546.     CMP    marks,mines
  547.     BGT    tip_false
  548.     TST    test,#64
  549.     BNE    field_6
  550.     CMP    marks,mines
  551.     BNE    tip_false
  552. field_6 TST    _58,#CLOSED_2            ; buffer1 = X p o k
  553.     BNE    field_4                ; buffer2 = f h n m
  554.     TST    _58,#CLOSED_3
  555.     BEQ    f6_mn_loaded
  556.     BIC    buffer2,buffer2,#&00FF0000    ; delete m
  557.     BIC    buffer2,buffer2,#&FF000000    ; delete n
  558.     SUB    d,YMAX,y
  559.     CMP    d,#2
  560.     BLE    f6_mn_loaded
  561.     ADD    ptr,ptr,#8
  562.     CMP    x,#1
  563.     LDRGEB    d,[ptr,-YMAX,LSL #2]        ; load m
  564.     ORRGE    buffer2,buffer2,d,LSL #24
  565.     LDRB    d,[ptr]                ; load n
  566.     ORR    buffer2,buffer2,d,LSL #16
  567.     SUB    ptr,ptr,#8
  568. f6_mn_loaded
  569.     BIC    buffer1,buffer1,#&0000FF00    ; delete d
  570.     BIC    buffer1,buffer1,#&00FF0000    ; delete e
  571.     BIC    buffer1,buffer1,#&FF000000    ; delete g
  572.     CMP    x,#2
  573.     BLT    f6_hjl
  574.     SUB    ptr,ptr,YMAX,LSL #3
  575.     LDRB    d,[ptr]                ; load h
  576.     ORR    buffer1,buffer1,d,LSL #8
  577.     SUB    d,YMAX,y
  578.     CMP    d,#1
  579.     LDRGTB    d,[ptr,#4]            ; load j
  580.     ORRGT    buffer1,buffer1,d,LSL #16
  581.     SUB    d,YMAX,y
  582.     CMP    d,#2
  583.     LDRGTB    d,[ptr,#8]            ; load l
  584.     ORRGT    buffer1,buffer1,d,LSL #24
  585.     ADD    ptr,ptr,YMAX,LSL #3
  586. f6_hjl    MOV    mines,#0            ; buffer1 = X h j l
  587.     TST    buffer1,#MINE_1            ; buffer2 = f h n m
  588.     ADDNE    mines,mines,#1
  589.     TST    buffer1,#MINE_2
  590.     ADDNE    mines,mines,#1
  591.     TST    buffer1,#MINE_3
  592.     ADDNE    mines,mines,#1
  593.     TST    buffer1,#MINE_4
  594.     ADDNE    mines,mines,#1
  595.     TST    buffer2,#MINE_3
  596.     ADDNE    mines,mines,#1
  597.     TST    buffer2,#MINE_4
  598.     ADDNE    mines,mines,#1
  599.     TST    _14,#MINE_4
  600.     ADDNE    mines,mines,#1
  601.     TST    _58,#MINE_3
  602.     ADDNE    mines,mines,#1
  603.     MOV    marks,#0
  604.     TST    buffer1,#MARK_1
  605.     ADDNE    marks,marks,#1
  606.     TST    buffer1,#MARK_2
  607.     ADDNE    marks,marks,#1
  608.     TST    buffer1,#MARK_3
  609.     ADDNE    marks,marks,#1
  610.     TST    buffer1,#MARK_4
  611.     ADDNE    marks,marks,#1
  612.     TST    buffer2,#MARK_3
  613.     ADDNE    marks,marks,#1
  614.     TST    buffer2,#MARK_4
  615.     ADDNE    marks,marks,#1
  616.     TST    _14,#MARK_4
  617.     ADDNE    marks,marks,#1
  618.     TST    _58,#MARK_3
  619.     ADDNE    marks,marks,#1
  620.     CMP    marks,mines
  621.     BGT    tip_false
  622.     TST    test,#32
  623.     BNE    field_4
  624.     CMP    marks,mines
  625.     BNE    tip_false
  626. field_4 TST    _14,#CLOSED_4            ; buffer1 = X h j l
  627.     BNE    tip_true            ; buffer2 = f h n m
  628.     TST    _58,#CLOSED_2
  629.     BEQ    f4_hj_loaded
  630.     BIC    buffer1,buffer1,#&00FF0000
  631.     BIC    buffer1,buffer1,#&0000FF00
  632.     BIC    buffer2,buffer2,#&00FF0000
  633.     CMP    x,#2
  634.     BLT    f4_hj_loaded
  635.     SUB    ptr,ptr,YMAX,LSL #3
  636.     CMP    y,#1
  637.     LDRGEB  d,[ptr,-#4]            ; load f
  638.     ORRGE    buffer2,buffer2,d,LSL #16
  639.     LDRB    d,[ptr]                ; load h
  640.     ORR    buffer1,buffer1,d,LSL #8
  641.     SUB    d,YMAX,y
  642.     CMP    d,#1
  643.     LDRGTB    d,[ptr,#4]            ; load j
  644.     ORRGT    buffer1,buffer1,d,LSL #16
  645.     ADD    ptr,ptr,YMAX,LSL #3
  646.     B    f4_f
  647. f4_hj_loaded
  648.        BIC    buffer2,buffer2,#&00FF0000    ; delete
  649.     CMP    x,#2
  650.     BLT    f4_f
  651.     SUB    ptr,ptr,YMAX,LSL #3
  652.     CMP    y,#1
  653.     LDRGEB    d,[ptr,-#4]            ; load f
  654.     ORRGE    buffer2,buffer2,d,LSL #16
  655.     ADD    ptr,ptr,YMAX,LSL #3
  656. f4_f    MOV    mines,#0            ; buffer1 = X h j l
  657.     TST    buffer1,#MINE_1            ; buffer2 = f h f m
  658.     ADDNE    mines,mines,#1
  659.     TST    buffer1,#MINE_2
  660.     ADDNE    mines,mines,#1
  661.     TST    buffer1,#MINE_3
  662.     ADDNE    mines,mines,#1
  663.     TST    buffer2,#MINE_3
  664.     ADDNE    mines,mines,#1
  665.     TST     _14,#MINE_1
  666.     ADDNE    mines,mines,#1
  667.     TST     _14,#MINE_2
  668.     ADDNE    mines,mines,#1
  669.     TST     _58,#MINE_2
  670.     ADDNE    mines,mines,#1
  671.     TST     _58,#MINE_3
  672.     ADDNE    mines,mines,#1
  673.     MOV    marks,#0
  674.     TST    buffer1,#MARK_1
  675.     ADDNE    marks,marks,#1
  676.     TST    buffer1,#MARK_2
  677.     ADDNE    marks,marks,#1
  678.     TST    buffer1,#MARK_3
  679.     ADDNE    marks,marks,#1
  680.     TST    buffer2,#MARK_3
  681.     ADDNE    marks,marks,#1
  682.     TST    _14,#MARK_1
  683.     ADDNE    marks,marks,#1
  684.     TST    _14,#MARK_2
  685.     ADDNE    marks,marks,#1
  686.     TST    _58,#MARK_2
  687.     ADDNE    marks,marks,#1
  688.     TST    _58,#MARK_3
  689.     ADDNE    marks,marks,#1
  690.     CMP    marks,mines
  691.     BGT    tip_false
  692.     TST    test,#8
  693.     BNE    tip_true
  694.     CMP    marks,mines
  695.     BNE    tip_false
  696. tip_true MOV    r0,#1
  697.     LDMFD    sp!,{r4-r12,pc}
  698. tip_false MOV    r0,#0
  699.     LDMFD    sp!,{r4-r12,pc}
  700.  
  701.     END
  702.